const ApiResponse = require('../common/api-response.js')

class BaseService {
  constructor({ cloudObject }) {
    this.db = uniCloud.database()
    this.dbCmd = this.db.command
    this.cloudObject = cloudObject
  }

  /**
   * 包装API请求方法，统一处理响应结果
   * @param {Promise} apiCall - API调用方法
   * @returns {Promise} 处理后的响应数据或错误
   */
  async handleApiResponse(apiCall) {
    try {
      const res = await apiCall();
      
      if (res.code === 200) {
        // 成功响应，返回data数据
        return res.data;
      } else {
        // 非200响应，抛出错误信息
        throw new Error(res.msg || '请求处理失败');
      }
    } catch (error) {
      // 捕获网络错误或其他异常
      throw new Error(error.message || 'API请求异常');
    }
  }

  /**
   * 简化try-catch块
   * @param {Function} fn - 要执行的异步函数
   * @param {string} [errorMessage] - 自定义错误消息
   */
  async executeWithHandling(fn, errorMessage) {
    try {
      return await fn()
    } catch (error) {
      console.error(errorMessage || '操作执行失败:', error)
      throw error // 或者返回ApiResponse.serverError(error.message)
    }
  }
}

module.exports = BaseService